package com.dylearn.utils;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 常用简单判断工具 一般的检验数据工具都放在这里
 */
@Component
public class CommonTools {
    // 根据阿里巴巴代码规范，将Pattern设置为全局常量
    // 通过 -?[0-9]+(\\\\.[0-9]+)? 进行匹配是否为数字
    private Pattern pattern = Pattern.compile("-?[0-9]+(\\\\.[0-9]+)?");

    private String[] patch = {"000000","00000", "0000", "000", "00", "0",""};//根据长度来获取对应的数据

    /**
     * 通过正则表达式判断字符串是否为数字
     *
     * @param str
     * @return
     */
    public boolean isNumber(String str) {
        // 通过Matcher进行字符串匹配
        Matcher m = pattern.matcher(str);
        // 如果正则匹配通过 m.matches() 方法返回 true ，反之 false
        return m.matches();
    }

    /**
     * 根据 手机号 来获取随机的 6 位验证码
     */
    public String generator(String tele) {
        int hash = tele.hashCode();
        int encryption = 1246546321; //随机数据 用于加密
        long result = hash ^ encryption; //哈希加密
        long nowTime = System.currentTimeMillis();//获取当前时间
        result = result ^ nowTime;//进行二次加密 --保证数据是随机的
       // System.out.println("result => " + result);

        long code = result % 1000000; //取值 取后六位
       // System.out.println("code => " + code);

        code = code < 0 ? -code : code; //三目运算，保证得出的数据一定为正数
        String codeStr = code + "";
        int len = codeStr.length(); //获取长度 补0

        return patch[len] + codeStr;
    }

    @Cacheable(value = "cacheCode", key = "#tele")
    public String getMsgData(String tele) {//这个注解的话，就相当于直接取值，有值的就返回值

        return null;//没值的就返回null
    }

}
